package zdori;

public class J16_Opp2 {

	/**
	 * @param args
	 * 
	 * 클래스변수의 종류
	 * 멤버 member변수
	 * 클래스 블록 내에 선언한 변수
	 * 해당 클래스를 통해서만 사용 가능한 변수
	 * 
	 * 인스턴스 instance/object 변수
	 * 객체를 가리키는 변수를 의미
	 * 클래스와 new 연산자를 사용한 문장의 실행했을 때 결과물
	 * 
	 * 메서드
	 * 클래스의 객체가 할 수 있는 행위를 정의 
	 * 메서드에는 선언부와 문체가 있음
	 * 
	 * 접근 제한자 반환유형 메서드 이름(매게변수 목록){
	 * 	메서드 몸체
	 * }
	 * 메서드 선언부는 반환유형 메서드 이름 인수목록임
	 * 메서드 선언부를 메서드 서명이라고도 함
	 * 
	 * 특별한 메서드인 main은 프로그램의 진입점을 제공
	 * 일반적으로 프로그램은 수 많은 클래스로 구성됨
	 * 그 중 주가 되는 메서드가 하나 있어야 하는데 그것이 바로 main 메서드 임
	 * 
	 * 메서드 호출은 객체명 메서드이름() 으로 실행
	 * 
	 *
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Retangle rRed = new Retangle();
		rRed.width = 4;
		rRed.height = 40;
		rRed.color = "red";
		//rt.getArea(rt.width, rt.height);
		//rt.getPerimeter(rt.width, rt.height);
		//System.out.println(rRed.color);
		//System.out.println(rRed.getArea(rRed.width, rRed.height));
		//System.out.println(rRed.getPerimeter(rRed.width, rRed.height));
		//rRed.getArea();
		//rRed.getPerimeter();
		System.out.println(rRed.getArea());
		System.out.println(rRed.getPerimeter());
		
		Retangle rOrange = new Retangle();
		rRed.width = 3.5F;
		rRed.height = 35.9F;
		rRed.color = "orange";
		//System.out.println(rOrange.color);
		//System.out.println(rOrange.getArea(rOrange.width, rOrange.height));
		//System.out.println(rOrange.getPerimeter(rOrange.width, rOrange.height));
		
		
		Fan f1 = new Fan();
		f1.speed = f1.FAST;
		f1.on = true;
		f1.color = "yellow";
		
		//System.out.println(f1.color);
		//f1.showFanInfo();
		System.out.println(f1.showFanInfo());
				
		Fan f2 = new Fan();
		f2.speed = f2.MEDIUM;
		f2.on = false;
		
		//System.out.println(f2.color);
		System.out.println(f2.showFanInfo());
		
		Account cust01 = new Account();
		cust01.aid = 1122;
		cust01.balance = 20000;
		cust01.interestRate = 4.5F;
		cust01.dateCreated = "2013-11-06 13:15:45";
		System.out.println(cust01.getMonthlyIntertestRate());
		System.out.println(cust01.balance);
		cust01.withDraw(1000);
		System.out.println(cust01.balance);
		cust01.diposit(3000);
		System.out.println(cust01.balance);
		
		
		Stock st = new Stock();
		st.sname = "경영기술";
		st.previousClosingPrice = 1_000_000;
		st.currentPrice = 750_000;
		// 자리수 구분 문자 _ JDK7.0 이상에서 지원
		System.out.println(st.getChangePercent());
		
		
		Students teahee = new Students();
		teahee.kor = 99;
		teahee.eng = 98;
		teahee.mat = 99;
		//teahee.computeTotal();
		//teahee.computeAvg();
		//teahee.computeGrade();
		teahee.showSungjuk();
		
	}

}

class Retangle{
	float width = 1.0F;
	float height = 1.0F;
	String color = "white";
	
	Retangle(){
		
	}
	/*
	Retangle(float wd ,float hg, String cl){
		width = wd;
		height = hg;
		color = cl;
	}
	
	float getArea(float wd ,float hg){
		return wd*hg;
	}
	
	float getPerimeter(float wd ,float hg){
		return (wd+hg)*2;
	}
	*/
	
	float getArea(){
		return width*height;
	}
	
	float getPerimeter(){
		return (width+height)*2;
	}
}

class Fan{
	//상수
	final int SLOW = 1;
	final int MEDIUM = 2;
	final int FAST = 3;
	
	int speed = SLOW;
	boolean on = false;
	float radius = 5.0F;
	String color = "blue";
	
	
	Fan(){
		
	}
	
	String showFanInfo(){
		String msg = "";
		if(on == true){
			msg = speed + "/"+ color +"/"+ radius +"/"+ "작동중";
		}else{
			msg = speed + "/"+ color +"/"+ radius +"/"+ "꺼져있음";
		}
		return msg;
	}
	
}

class Account{
	int aid = 0;
	int balance = 0;
	float interestRate = 0;
	String dateCreated;
	
	Account(){
		
	}
	
	float getMonthlyIntertestRate(){
		return interestRate/12;
	}
	
	//call by value 로 인해 예금 금액이 제대로 차감되지 않음
	/*
	int withDraw(int gold){
		
		return balance - gold;
	}
	*/
	int withDraw(int gold){
		
		return balance -= gold;
	}
	
	int diposit(int gold){
		
		return balance += gold;
	}
	
}

class Stock{
	String sname;
	int previousClosingPrice;
	int currentPrice;
	
	float getChangePercent(){
		
		return (1-((float)currentPrice/previousClosingPrice))*100;
	}
}

//학생 클래스
class Students{
	int stdno;
	int kor;
	int eng;
	int mat;
	int total;
	float arg;
	String grade;
	
	//총점 구하기
	/*
	void computeTotal(){
		System.out.println(kor+eng+mat);
	}
	*/
	int computeTotal(){
		return kor+eng+mat;
	}
	
	//평균
	/*
	void computeAvg(){
		arg = (float)((kor+eng+mat)/3);
		System.out.println(arg);
	}
	*/
	float computeAvg(){
		return (float)this.computeTotal() / 3;
	}
	
	//학점
	/*
	void computeGrade(){
		
		
		//kor+eng+mat/3;
		//if( (kor+eng+mat)/3 == 100){
			//grade = "수";
		if((kor+eng+mat)/3 >= 90){
			grade = "수";
		}else if((kor+eng+mat)/3 >= 80){
			grade = "우";
		}else if((kor+eng+mat)/3 >= 70){
			grade = "미";
		}else if((kor+eng+mat)/3 >= 60){
			grade = "양";
		}else{
			grade = "가";
		}
		System.out.println(grade);
		
		float tot = (float)(kor+eng+mat)/3;
		
		switch((int)tot/10){
		case 10: case 9:
			grade = "수";
			break;
		case 8 :
			grade = "우";
			break;
		case 7 :
			grade = "미";
			break;
		case 6 :
			grade = "양";
			break;
		default : 
			grade = "가";
		}
		
	}
	*/
	void computeGrade(){
	//String computeGrade(){
		switch((int)computeAvg()/10){
		case 10: case 9:
			grade = "수";
			break;
		case 8 :
			grade = "우";
			break;
		case 7 :
			grade = "미";
			break;
		case 6 :
			grade = "양";
			break;
		default : 
			grade = "가";
		}
		//return grade;
		System.out.println(grade);
	}
	
	//모든 결과 출력
	void showSungjuk(){
		System.out.println(this.computeTotal());
		System.out.println(this.computeAvg());
		//System.out.println(this.computeGrade());
		this.computeGrade();
	}
	
}